package com.ken.algorithms.stack;

import java.util.Arrays;
import java.util.Stack;

/**
 * <ul>
 * <li>Title: MainLC739</li>
 * <li>Description: TODO </li>
 * </ul>
 *
 * @author 程序员ken
 * @date 2021/5/19 0019 下午 17:00
 */
public class MainLC739 {

    /**
     * 【题目描述】：
     * 请根据每日 气温 列表，重新生成一个列表。对应位置的输出为：
     * 要想观测到更高的气温，至少需要等待的天数。如果气温在这之后都不会升高，请在该位置用 0 来代替。
     * 例如，给定一个列表 temperatures = [73, 69, 150]
     *  返回结果就是 数组下班 对应几天后升温 73【索引为0】 对应2天后升温  69【索引为1】 对应1天后升温  150【索引为1】 对应1天后升温
    */
    public static void main(String[] args) {
        int arr[] ={76,12,832,1878};
        int[] ints = dailyTemperatures(arr);
        System.out.println(Arrays.toString(ints));
    }


    /**
     * 功能描述: 单调递减时 气温索引和值不变化 突然违反递减时 说明升温了 栈顶挨个取值 就可以得到相差的天数
    */
    public static int[] dailyTemperatures(int[] tpt) {
        Stack<Integer> stack = new Stack<Integer>();
        int[] res = new int[4];
        for (int i = 0; i < tpt.length; i++) {
            //升温了 切勿别把索引值和当前气温值对比 用索引对应的气温值和当前气温对比
            while (!stack.isEmpty() && tpt[stack.peek()]< tpt[i]){
                int lowTpt = stack.pop();
                res[lowTpt] = i-lowTpt;
            }
            stack.push(i);//存入当前索引
        }
        return res;
    }

}
